package superBarbershop;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.*;

class Graficador extends JFrame implements ActionListener
{
    Tablita tabla;
    int i=0,j=0;
    Graphics g;
    
    Peluqueria nego=new Peluqueria();
    class Red implements Runnable
    {       
        public Red()
        {           
        }
        
        @Override
        public void run()
        {
            try
            {           
                while(true)
                {
                redibuja(g);
                Thread.sleep(1000);
                }
            }
            catch (InterruptedException e) {}
        }
    }
    
    public Graficador()
    {

        super( "OS-ITC's BARBERSHOP" );
        menus();
        JPanel panelBotones;
        JButton botonIniciar = null;
        JButton botonSalir = null;
        JButton botonmtabla = null;
        setSize( 600, 700 );
        setVisible( true );
        setLocationRelativeTo(null);
        g=super.getGraphics();
        Thread t = new Thread(new Red());
        t.start();
        
        /*botonIniciar = new JButton();
        botonIniciar.setText("Ingresar");
        botonIniciar.setSize(200,200);
        botonIniciar.addActionListener(this);
        botonSalir = new JButton();
        botonSalir.setText("Borrar");
        botonSalir.setSize(200,200);
        botonSalir.addActionListener(this);
        botonmtabla = new JButton();
        botonmtabla.setText("Tabla");
        botonmtabla.setSize(200,200);
        botonmtabla.addActionListener(this);
        panelBotones = new JPanel();
        panelBotones.add(botonmtabla,BorderLayout.WEST);
        panelBotones.add(botonIniciar,BorderLayout.EAST);
        panelBotones.add(botonSalir,BorderLayout.EAST);
        this.getContentPane().add(panelBotones,BorderLayout.SOUTH);*/
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        String ac = e.getActionCommand();
        Object[] opciones= {"1", "2"};
        String k;
        if (ac.equals("Ingresar"))
        {
            try
            {
                nego.agregarCliente((int)(Math.random()*9) + 1, (int)(Math.random()*9) + 1);
                Graphics h=super.getGraphics();
                super.paint( h );
                redibuja(h);
            }
            catch (IndexOutOfBoundsException ioe)
            {
                JOptionPane.showMessageDialog(null, "NO HAY LUGAR DISPONIBLE");
            }
        }
        if (ac.equals("Borrar"))
        {
            try
            {
                k=(String)JOptionPane.showInputDialog(null, "ASIENTO A DESOCUPAR", "ELIJA UNA OPCION", JOptionPane.PLAIN_MESSAGE, null, opciones,"1");
                int peluquero=Integer.parseInt(k);
                //nego.liberarPeluquero(peluquero-1);

            }
                catch(IllegalArgumentException iae)
            {
                JOptionPane.showMessageDialog(null, "NO HAY CLIENTE");
            }
            catch (NullPointerException npe)
            {}
                Graphics gr=super.getGraphics();
                super.paint( gr );
                redibuja(gr);
        }
        if(ac.equals("Tabla"))
        {
            //esto no funciona y no se porque
            tabla = new Tablita();
            Tablita.main(null);
        }
    }
    public void redibuja(Graphics g)
    {
        super.paint( g );
        g.setColor( Color.decode("444444444"));
        g.fillRect(110, 150, 400, 400);
        Graphics2D g2d = ( Graphics2D ) g;
        BufferedImage buffImage = new BufferedImage( 10, 10,
        BufferedImage.TYPE_INT_RGB);
        Graphics2D gg = buffImage.createGraphics();
        gg.setColor( Color.decode("11001000") );
        gg.fillRect( 0, 0, 10, 10 );
        gg.setColor( Color.LIGHT_GRAY );
        gg.drawRect( 1, 1, 10, 10 );
        gg.setColor( Color.WHITE );
        gg.fillRect( 1, 1, 1, 1 );
        gg.setColor( Color.decode("444444444") );
        gg.fillRect( 5,5, 3, 3 );
        g2d.setPaint( new TexturePaint( buffImage,
        new Rectangle( 20, 20 ) ) );
        g2d.fill( new RoundRectangle2D.Double( 110,150, 400, 400, 50, 50 ) );

        g.setColor(Color.WHITE);
        g.fillRect(200, 500, 50, 40);//asiento desocupado sillon 1
        g.fillRect(250, 500, 50, 40);//asiento desocupado sillon 2
        g.fillRect(300, 500, 50, 40);//asiento desocupado sillon 3
        g.fillRect(350, 500, 50, 40);//asiento desocupado sillon 4
        g.fillRect(400, 500, 50, 40);//asiento desocupado sillon 5
        g.fillRect(450, 500, 50, 40);//asiento desocupado sillon 6


        g.setColor(Color.WHITE);

        g.fillRect(150, 330, 60, 50);//silla barbero 1
        g.fillRect(150, 430, 60, 50);//silla barbero 2
        g.setColor(Color.GREEN);
        g.fillRect(220, 340, 30, 30);//barbero 1
        g.fillRect(220, 440, 30, 30);//barbero 2
        g.setColor(Color.RED);
        g.drawRect(150, 330, 60, 50);//silla barbero 1
        g.drawRect(150, 430, 60, 50);//silla barbero 2
        g.drawRect(220, 340, 30, 30);//barbero 1
        g.drawRect(220, 440, 30, 30);//barbero 2
        g.drawRect(200, 500, 50, 40);//asiento desocupado sillon 1
        g.drawRect(250, 500, 50, 40);//asiento desocupado sillon 2
        g.drawRect(300, 500, 50, 40);//asiento desocupado sillon 3
        g.drawRect(350, 500, 50, 40);//asiento desocupado sillon 4
        g.drawRect(400, 500, 50, 40);//asiento desocupado sillon 5
        g.drawRect(450, 500, 50, 40);//asiento desocupado sillon 6
        g.setColor(Color.RED);

        g.setColor(Color.BLACK);
        String num="1";
        g.drawString(num, 230, 360);
        num="2";
        g.drawString(num, 230, 460);
        g.clearRect(175, 340, 30, 30);//asiento barbero desocupado 1
        g.clearRect(175, 440, 30, 30);//asiento barbero desocupado 2
        g.clearRect(210, 505, 30, 30);//asiento desocupado 1
        g.clearRect(260, 505, 30, 30);//asiento desocupado 2
        g.clearRect(310, 505, 30, 30);//asiento desocupado 3
        g.clearRect(360, 505, 30, 30);//asiento desocupado 4
        g.clearRect(410, 505, 30, 30);//asiento desocupado 5
        g.clearRect(460, 505, 30, 30);//asiento desocupado 6

        //CAJA
        g.setColor(Color.BLACK);
        g.drawRoundRect(460,170, 30, 100, 20, 20);//marco
        g.setColor(Color.RED);
        g.fillRoundRect(460,170, 50, 20, 20, 20);//relleno
        g.setColor(Color.BLACK);
        g.drawRoundRect(460,170, 50, 20, 20, 20);//marco
        g.setColor(Color.RED);
        g.fillRoundRect(460,250, 50, 20, 20, 20);//relleno
        g.setColor(Color.BLACK);
        g.drawRoundRect(460,250, 50, 20, 20, 20);//marco
        g.setColor(Color.RED);
        g.fillRoundRect(461,170, 29, 100, 20, 20);//relleno

        g.setColor(Color.green);
        g.fillRoundRect(464,197, 20, 25, 10, 10);//relleno
        g.setColor(Color.black);
        num="$";
        g.drawString(num, 470, 215);
        g.drawRoundRect(464,197, 20, 25, 10, 10);//marco



        if(nego.peluqueros().sillas()[0]!=null)
        {
            g.setColor(new Color (nego.peluqueros().sillas()[0].color()));
            g.fillOval(175, 340, 30, 30);//asiento barbero ocupado 1
            g.setColor(Color.black);
            g.drawString(""+nego.peluqueros().sillas()[0].id(), 187, 360);
        }// fin del if
        else
        {
            g.clearRect(175, 340, 30, 30);//asiento barbero desocupado 1
        }
        if(nego.peluqueros().sillas()[1]!=null)
        {
            g.setColor(new Color (nego.peluqueros().sillas()[1].color()));
            g.fillOval(175, 440, 30, 30);//asiento barbero ocupado 2
            g.setColor(Color.black);
            g.drawString(""+nego.peluqueros().sillas()[1].id(), 187, 460);
        }// fin del if
        else
        {
            g.clearRect(175, 440, 30, 30);//asiento barbero desocupado 2
        }
        if(nego.sofa().asientos()[0]!=null)
        {
            g.setColor(new Color (nego.sofa().asientos()[0].color()));
            g.fillOval(210, 505, 30, 30);//asiento ocupado 1
            g.setColor(Color.black);
            g.drawString(""+nego.sofa().asientos()[0].id(), 222, 525);
        }// fin del if
        else
        {
            g.clearRect(210, 505, 30, 30);//asiento ocupado 1
        }
        if(nego.sofa().asientos()[1]!=null)
        {
            g.setColor(new Color (nego.sofa().asientos()[1].color()));
            g.fillOval(260, 505, 30, 30);//asiento ocupado 2
            g.setColor(Color.black);
            g.drawString(""+nego.sofa().asientos()[1].id(), 272, 525);
        }// fin del if
        else
        {
            g.clearRect(260, 505, 30, 30);//asiento ocupado 2
        }
        if(nego.sofa().asientos()[2]!=null)
        {
            g.setColor(new Color (nego.sofa().asientos()[2].color()));
            g.fillOval(310, 505, 30, 30);//asiento ocupado 3
            g.setColor(Color.black);
            g.drawString(""+nego.sofa().asientos()[2].id(), 322, 525);
        }// fin del if
        else
        {
            g.clearRect(310, 505, 30, 30);//asiento ocupado 3
        }
        if(nego.sofa().asientos()[3]!=null)
        {
            g.setColor(new Color (nego.sofa().asientos()[3].color()));
            g.fillOval(360, 505, 30, 30);//asiento ocupado 4
            g.setColor(Color.black);
            g.drawString(""+nego.sofa().asientos()[3].id(), 372, 525);
        }// fin del if
        else
        {
            g.clearRect(360,505, 30, 30);
        }
        if(nego.sofa().asientos()[4]!=null)
        {
            g.setColor(new Color (nego.sofa().asientos()[4].color()));
            g.fillOval(410, 505, 30, 30);//asiento ocupado 5
            g.setColor(Color.black);
            g.drawString(""+nego.sofa().asientos()[4].id(), 422, 525);
        }// fin del if
        else
        {
            g.clearRect(410, 505, 30, 30);
        }
        if(nego.sofa().asientos()[5]!=null)
        {
            g.setColor(new Color (nego.sofa().asientos()[5].color()));
            g.fillOval(460, 505, 30, 30);//asiento ocupado 6
            g.setColor(Color.black);
            g.drawString(""+nego.sofa().asientos()[5].id(), 472, 525);
        }
        else
        {
            g.clearRect(460, 505, 30, 30);
        }
if(nego.caja().length>0)
{
if(nego.caja().length>0)
        {
            g.setColor(new Color (nego.caja()[0].color()));
            g.fillOval(420, 210, 30, 30);//lugar caja 1
            g.setColor(Color.black);
            g.drawString(""+nego.caja()[0].id(), 432, 230);
       }// fin del if
if(nego.caja().length>1)
       {
           g.setColor(new Color (nego.caja()[1].color()));
           g.fillOval(380, 210, 30, 30);//lugar caja 2
           g.setColor(Color.black);
           g.drawString(""+nego.caja()[1].id(), 392, 230);
       }// fin del if

if(nego.caja().length>2)
    {
            g.setColor(new Color (nego.caja()[2].color()));
            g.fillOval(340, 210, 30, 30);//lugar caja 3
            g.setColor(Color.black);
            g.drawString(""+nego.caja()[2].id(), 352, 230);
    }// fin del if
if(nego.caja().length>3)
    {
            g.setColor(new Color (nego.caja()[3].color()));
            g.fillOval(300, 210, 30, 30);//lugar caja 4
            g.setColor(Color.black);
            g.drawString(""+nego.caja()[3].id(), 312, 230);
    }// fin del if
if(nego.caja().length>4)
    {
            g.setColor(new Color (nego.caja()[4].color()));
            g.fillOval(260, 210, 30, 30);//lugar caja 5
            g.setColor(Color.black);
            g.drawString(""+nego.caja()[4].id(), 272, 230);
    }// fin del if
if(nego.caja().length>5)
    {
            g.setColor(new Color (nego.caja()[5].color()));
            g.fillOval(220, 210, 30, 30);//lugar caja 6
            g.setColor(Color.black);
            g.drawString(""+nego.caja()[5].id(), 232, 230);
    }// fin del if

if(nego.caja().length>6)
    {
            g.setColor(new Color (nego.caja()[6].color()));
            g.fillOval(180, 210, 30, 30);//lugar caja 7
            g.setColor(Color.black);
            g.drawString(""+nego.caja()[6].id(), 192, 230);
    }// fin del if

if(nego.caja().length>7)
    {
            g.setColor(new Color (nego.caja()[7].color()));
            g.fillOval(140, 210, 30, 30);//lugar caja 8
            g.setColor(Color.black);
            g.drawString(""+nego.caja()[7].id(), 142, 230);
    }// fin del if
}
    }
    
    @Override
    public void paint( Graphics g )
    {
        super.paint( g );
        g.setColor( Color.decode("444444444"));
        g.fillRect(110, 150, 400, 400);
        Graphics2D g2d = ( Graphics2D ) g;
        BufferedImage buffImage = new BufferedImage( 10, 10,
        BufferedImage.TYPE_INT_RGB);
        Graphics2D gg = buffImage.createGraphics();
        gg.setColor( Color.decode("11001000") );
        gg.fillRect( 0, 0, 10, 10 );
        gg.setColor( Color.LIGHT_GRAY );
        gg.drawRect( 1, 1, 10, 10 );
        gg.setColor( Color.WHITE );
        gg.fillRect( 1, 1, 1, 1 );
        gg.setColor( Color.decode("444444444") );
        gg.fillRect( 5,5, 3, 3 );
        g2d.setPaint( new TexturePaint( buffImage,
        new Rectangle( 20, 20 ) ) );
        g2d.fill( new RoundRectangle2D.Double( 110,150, 400, 400, 50, 50 ) );

        g.setColor(Color.WHITE);
        g.fillRect(200, 500, 50, 40);//asiento desocupado sillon 1
        g.fillRect(250, 500, 50, 40);//asiento desocupado sillon 2
        g.fillRect(300, 500, 50, 40);//asiento desocupado sillon 3
        g.fillRect(350, 500, 50, 40);//asiento desocupado sillon 4
        g.fillRect(400, 500, 50, 40);//asiento desocupado sillon 5
        g.fillRect(450, 500, 50, 40);//asiento desocupado sillon 6


        g.setColor(Color.WHITE);

        g.fillRect(150, 330, 60, 50);//silla barbero 1
        g.fillRect(150, 430, 60, 50);//silla barbero 2
        g.setColor(Color.GREEN);
        g.fillRect(220, 340, 30, 30);//barbero 1
        g.fillRect(220, 440, 30, 30);//barbero 2
        g.setColor(Color.RED);
        g.drawRect(150, 330, 60, 50);//silla barbero 1
        g.drawRect(150, 430, 60, 50);//silla barbero 2
        g.drawRect(220, 340, 30, 30);//barbero 1
        g.drawRect(220, 440, 30, 30);//barbero 2
        g.drawRect(200, 500, 50, 40);//asiento desocupado sillon 1
        g.drawRect(250, 500, 50, 40);//asiento desocupado sillon 2
        g.drawRect(300, 500, 50, 40);//asiento desocupado sillon 3
        g.drawRect(350, 500, 50, 40);//asiento desocupado sillon 4
        g.drawRect(400, 500, 50, 40);//asiento desocupado sillon 5
        g.drawRect(450, 500, 50, 40);//asiento desocupado sillon 6
        g.setColor(Color.RED);

        g.setColor(Color.BLACK);
        String num="1";
        g.drawString(num, 230, 360);
        num="2";
        g.drawString(num, 230, 460);
        g.clearRect(175, 340, 30, 30);//asiento barbero desocupado 1
        g.clearRect(175, 440, 30, 30);//asiento barbero desocupado 2
        g.clearRect(210, 505, 30, 30);//asiento desocupado 1
        g.clearRect(260, 505, 30, 30);//asiento desocupado 2
        g.clearRect(310, 505, 30, 30);//asiento desocupado 3
        g.clearRect(360, 505, 30, 30);//asiento desocupado 4
        g.clearRect(410, 505, 30, 30);//asiento desocupado 5
        g.clearRect(460, 505, 30, 30);//asiento desocupado 6
        g.setColor(Color.BLACK);
        g.drawRoundRect(460,170, 30, 100, 20, 20);//marco
        g.setColor(Color.RED);
        g.fillRoundRect(460,170, 50, 20, 20, 20);//relleno
        g.setColor(Color.BLACK);
        g.drawRoundRect(460,170, 50, 20, 20, 20);//marco
        g.setColor(Color.RED);
        g.fillRoundRect(460,250, 50, 20, 20, 20);//relleno
        g.setColor(Color.BLACK);
        g.drawRoundRect(460,250, 50, 20, 20, 20);//marco
        g.setColor(Color.RED);
        g.fillRoundRect(461,170, 29, 100, 20, 20);//relleno

        g.setColor(Color.green);
        g.fillRoundRect(464,197, 20, 25, 10, 10);//relleno
        g.setColor(Color.black);
        num="$";
        g.drawString(num, 470, 215);
        g.drawRoundRect(464,197, 20, 25, 10, 10);//marco


    } // fin del método paint

    public void menus ()
    {
		JMenuBar menus = new JMenuBar();

		JMenu archivo= new JMenu("Archivo");

		/*JMenuItem inis= new JMenuItem("Iniciar Simulacion",null);
		inis.addActionListener(
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
					int opcion=JOptionPane.showConfirmDialog(null,"Desea Iniciar la Simulacion?","Salir",1,2,null);
					//if (opcion==0) { salir(); }
				}
			}
		);
                JMenuItem detener= new JMenuItem("Terminar Simulacion",null);
		detener.addActionListener(
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
					int opcion=JOptionPane.showConfirmDialog(null,"Desea Terminar la Simulacion?","Salir",1,2,null);
					//if (opcion==0) { salir(); }
				}
			}
		);*/
                JMenuItem sal= new JMenuItem("Salir",null);
		sal.addActionListener(
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
					int opcion=JOptionPane.showConfirmDialog(null,"Desea Salir?","Salir",1,2,null);
					if (opcion==0) { System.exit(0); }
				}
			}
		);
                JMenuItem most= new JMenuItem("Mostrar Tabla",null);
		most.addActionListener (
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
                                    //esto no funciona aun y no se por que...
                                tabla = new Tablita();
                                Tablita.main(null);
//
				}
			}
		);



		JMenu editar= new JMenu("ACCION");


               /* JMenuItem bor= new JMenuItem ("Liberar Cliente",null);
		bor.addActionListener (
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e)
                                {
                                    String k;
                                    Object[] opciones= {"1", "2"};
                                    try
                                    {
                                        k=(String)JOptionPane.showInputDialog(null, "ASIENTO A DESOCUPAR", "ELIJA UNA OPCION", JOptionPane.PLAIN_MESSAGE, null, opciones,"1");
                                        int peluquero=Integer.parseInt(k);
                                        nego.liberarPeluquero(peluquero-1);

                                    }
                                        catch(IllegalArgumentException iae)
                                    {
                                        JOptionPane.showMessageDialog(null, "NO HAY CLIENTE");
                                    }
                                    catch (NullPointerException npe)
                                    {}
                                    //redibujar();

				}
			}
		);*/

                JMenuItem ingre= new JMenuItem("Ingresar Cliente",null);
		ingre.addActionListener (
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
                                    String tiemposervicio,tiempocaja;
                                    Object[] opciones= {"5", "10","15","20","25"};
                                    Object[] opciones2= {"2", "4","6","8","10"};
                                    tiemposervicio=(String)JOptionPane.showInputDialog(null, "TIEMPO DE SERVICIO", "ELIJA UNA OPCION", JOptionPane.PLAIN_MESSAGE, null, opciones,"1");
                                    int ts=Integer.parseInt(tiemposervicio);
                                    tiempocaja=(String)JOptionPane.showInputDialog(null, "TIEMPO DE CAJA", "ELIJA UNA OPCION", JOptionPane.PLAIN_MESSAGE, null, opciones2,"1");
                                    int tc=Integer.parseInt(tiempocaja);
                                    //se necesita un nuevo metodo...
                                    //nego.agregarcliente(tiemposervicio,tiempocaja);

                                    
                                        try
                                         {
                                            nego.agregarCliente(ts, tc);
                                            //redibujar();
                                        }
                                        catch (IndexOutOfBoundsException ioe)
                                        {
                                        }
//					aqui va el metodo para ingresar*/
				}
			}
		);

                JMenuItem ingresarAleatorio= new JMenuItem("Ingresar Cliente Aleatorio",null);
		ingresarAleatorio.addActionListener (
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
                                         try
                                         {
                                            nego.agregarCliente((int)(Math.random()*9) + 1, (int)(Math.random()*9) + 1);
                                           // redibujar();
                                        }
                                        catch (IndexOutOfBoundsException ioe)
                                        {
                                            //JOptionPane.showMessageDialog(null, "NO HAY LUGAR DISPONIBLE");
                                        }

//					aqui va el metodo para ingresar aleatorio
				}
			}
		);

		JMenu about= new JMenu("Ayuda");
		JMenuItem ayu= new JMenuItem("Ayuda",null);
		ayu.addActionListener (
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
					ayuda ();
				}
			}
		);
		JMenuItem acer= new JMenuItem("Acerca de...",null);
		acer.addActionListener(
			new ActionListener () {
            @Override
				public void actionPerformed (ActionEvent e) {
					acerca();

					}
				}
		);
		archivo.add(sal);
                archivo.addSeparator();
                //archivo.add(inis);
                //archivo.addSeparator();
                //archivo.add(detener);
                //archivo.addSeparator();
                archivo.add(most);


                editar.add(ingre);
                editar.addSeparator();
                editar.add(ingresarAleatorio);
		about.add(ayu);
		about.addSeparator();
                about.add(acer);

		menus.add(archivo);
		menus.add(editar);
		menus.add(about);
		setJMenuBar(menus);

	}


        void salir()
        {
            this.dispose();
        }
	public void ayuda () {
		JOptionPane.showMessageDialog(null,"Guardar: Guarda el documento\n Salir: Salir del programa\n Cortar: ctrl+x\n Copiar: ctrl+c\n Pegar: ctrl+v\n Salir sin guardar: alt+F4");
	}

	public void acerca () {
		JOptionPane.showMessageDialog(null,"PELUQUERIA OS-ITC's SUPERBARBERSHOP\n DESARROLLADO POR:\n Medrano Muñoz Agustin\nNuñez Jimenez Mauricio Javier\n Ingenieria en sistemas computacionales");
	}
} // fin de la clase DibujarPoligonos
